package br.leiam.eolica.graficos;

import java.text.NumberFormat;
import java.util.Vector;

import javax.swing.table.AbstractTableModel;

public class MyTableModel extends AbstractTableModel {
    public static final int VELOCIDADE = 0;
    public static final int FREQUENCIA = 1;
    public static final int POTENCIA = 2;
    public static final int FVPV = 3;

    protected String[] columnNames;
    protected Vector dataVector;
	

    public MyTableModel(String[] columnNames, Dados dados) {
        this.columnNames = columnNames;
        dataVector = new Vector();
        configurarDados(dados);
    }
    
    public void configurarDados(Dados dados)
    {
    	for(int row = 0; row < dados.getVelocidade().length; row++)
    	{
    		for(int coluna = 0; coluna < 4; coluna++)
        	{
    			String vel, fr, cp, fvpv = null;
    			
    			vel = formatarDado(dados.getVelocidade(), row);
    			fr = formatarDado(dados.getFreqRelativa(),row);
    			cp = formatarDado(dados.getCurvaPotencia(),row);
    			fvpv = formatarDado(dados.getFvpv(),row);
    			Item item = new Item(vel, fr, cp, fvpv);
    			if(!dataVector.contains(item)){
    				dataVector.add(item);    				
    			}
        	}    		
    	}    	
    }

	private String formatarDado(double[] array, int row) {
		NumberFormat formatador = NumberFormat.getInstance();
		formatador.setMaximumFractionDigits(2);
		String aux = "";
		try {
			aux = formatador.format(array[row]).toString();
		} catch (ArrayIndexOutOfBoundsException e) {
			aux = "0";
		}
		return aux;
	}

    public String getColumnName(int column) {
        return columnNames[column];
    }

    public boolean isCellEditable(int row, int column) {
        if (column == -1) return false;
        else return true;
    }

    public Class getColumnClass(int column) {       
         return String.class;                   
    }

    public Object getValueAt(int row, int column) {
    	Item record = (Item)dataVector.get(row);
        switch (column) {
            case VELOCIDADE:
               return record.getVelocidade();
            case FREQUENCIA:
               return record.getFrequencia();
            case POTENCIA:
               return record.getPotencia();
            case FVPV:
                return record.getFpv();
            default:
               return null;
        }
    }

    public void setValueAt(Object value, int row, int column) {
        Item record = (Item)dataVector.get(row);
        switch (column) {
            case VELOCIDADE:
               record.setVelocidade((String)value);
               break;
            case FREQUENCIA:
               record.setFrequencia((String)value);
               break;
            case POTENCIA:
               record.setPotencia((String)value);
               break;
            case FVPV:
                record.setFpv((String)value);
                break;
            default:
               System.out.println("invalid index");
        }
        fireTableCellUpdated(row, column);
    }

    public int getRowCount() {
        return dataVector.size();
    }

    public int getColumnCount() {
        return columnNames.length;
    }

    public boolean hasEmptyRow() {
        if (dataVector.size() == 0) return false;
        Item item = (Item)dataVector.get(dataVector.size() - 1);
        if (item.getVelocidade().trim().equals("") &&
        	item.getFrequencia().trim().equals("") &&
        	item.getFpv().trim().equals("") &&
        	item.getPotencia().trim().equals(""))
        {
           return true;
        }
        else return false;
    }

  
    
    public class Item{
    	

		private String velocidade, frequencia, potencia, fpv = "";
    	
    	public Item() {
			this("","","","");
		}

		public Item(String velocidade, String frequencia, String potencia,
				String fpv) {
			super();
			this.velocidade = velocidade;
			this.frequencia = frequencia;
			this.potencia = potencia;
			this.fpv = fpv;
		}
    	
		public String getVelocidade() {
			return velocidade;
		}

		public void setVelocidade(String velocidade) {
			this.velocidade = velocidade;
		}

		public String getFrequencia() {
			return frequencia;
		}

		public void setFrequencia(String frequencia) {
			this.frequencia = frequencia;
		}

		public String getPotencia() {
			return potencia;
		}

		public void setPotencia(String potencia) {
			this.potencia = potencia;
		}

		public String getFpv() {
			return fpv;
		}

		public void setFpv(String fpv) {
			this.fpv = fpv;
		}
		
		@Override
		public String toString() {
			return "Item [velocidade=" + velocidade + ", frequencia="
					+ frequencia + ", potencia=" + potencia + ", fpv=" + fpv
					+ "]";
		}
		@Override
		public boolean equals(Object outro) {
			return this.toString().equals(((Item)outro).toString());
		}
		
			
		
    }
    
}